import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;

/**
 * @author Macrydy
 * @date 2022/5/9
 *
 * Set：
 * 1.不可重复、没有索引,不能使用普通for循环遍历
 * 2.存储元素为对象时必须定义排序方法否则报错
 *
 * Treeset
 * 排序：1.Student类实现Comparable接口重写compareTo方法
 *      2.ArrayList构造方法传入Comparator接口重写compareTo方法(推荐)
 *
 * Hashset
 * 存储对象需要重写hashcode和equals方法
 *   因为不重写的话对象类会继承Object类中hashcode(),计算的是对象的地址，
 *   会导致两个属性一样的对象因为内存地址不同而hash值不同，同时存进去
 *   出现重复元素
 *
 */
public class SetDemo {
    public static void main(String[] args) {
        Set<Student> set = new TreeSet<>(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                int result = o1.getName().compareTo(o2.getName());
                result=result==0?o1.getAge()-o2.getAge():result;
                return result;
            }
        });
        //添加元素
        set.add(new Student("xiaoming",18));
        set.add(new Student("xiaoming",23));
        set.add(new Student("xiaobai",20));
        set.add(new Student("xiaohong",19));

        System.out.println(set);

        System.out.println("---------------Hashset----------------");
        Set<Teacher> set1 = new HashSet();
        //添加元素
        set1.add(new Teacher("xiaoming",18));
        set1.add(new Teacher("xiaoming",23));
        set1.add(new Teacher("xiaoming",23));
        set1.add(new Teacher("xiaobai",20));
        set1.add(new Teacher("xiaohong",19));

        System.out.println(set);
    }
}
